#ifndef DDSCLIENTWRAPPER_H
#define DDSCLIENTWRAPPER_H

#include <QObject>
#include "cnp.hpp"

class DdsClientWrapper : public QObject
{
    Q_OBJECT
public:
    // 构造函数（不自动初始化）
    explicit DdsClientWrapper(QObject *parent = nullptr)
        : QObject(parent), domainId_(0), client_(nullptr), subStatu_(nullptr), subEvent_(nullptr) {}

    // 初始化DDS节点
    bool initialize(uint32_t domainId, const QString& deviceID);

    // 对外接口：发布指令请求消息
    CNP_RESULT publishCommand(const QString &content);
    CNP_RESULT startSubscription();
    // 订阅回调，内部转发到 Qt 信号
    void interStatuCallback(const CnpMsg &msg);
    void interEventCallback(const CnpMsg &msg);
    void shutdown();



signals:
    // 当收到消息时发出信号，传递消息内容
    void msgStatuReceived(const QString &msg);
    void msgEventReceived(const QString &msg);

private:
    uint32_t domainId_;
    QString topicName_;
    QString mdeviceID;
    QString pubTopicName;
    QString subTopicName;
    // 使用 CNPClient 进行 DDS 消息发布
    std::unique_ptr<CNPClient> client_;
    std::unique_ptr<CNPClient> subStatu_;
    std::unique_ptr<CNPClient> subEvent_;
};

#endif // DDSCLIENTWRAPPER_H
